iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
Odoo

Odoo 14 Javascript 開發心路歷程系列 第 25

Day 25 實作 11: 建立 action client view - 增加銷售訂單總和呈現的模板與資料路由

  • 分享至 

  • xImage
  •  

今日目標

  • [ ] 增加銷售訂單總和呈現的模板與資料路由

如何跟路由溝通,在第 20 天時有介紹過如何使用

今天帶各位新增一個路由,並在畫面顯示結果

首先在模組根目錄增加 controller 的資料夾

接著新增 [main.py](http://main.py) ,並輸入底下內容

# ironman_js/controller/main.py

# -*- encoding: utf-8 -*-
from odoo.http import route, Controller, request

class Main(Controller):
    @route('/ironman/data/sale_total', type='json', auth="user")
    def sale_total(self):
        orders = request.env['sale.order'].sudo().search([])

        return {
            'total': sum(order.amount_total for order in orders),
        }

老樣子,有增加 python 檔案,就是要向 __init__.py 註冊

# ironman_js/controller/__init__.py

# -*- encoding: utf-8 -*-
from . import main
# ironman_js/__init__.py

# -*- encoding: utf-8 -*-
from . import models
from . import controller

接著調整模板,在 table 的下方加入內容

<!-- ironman_js/static/src/xml/action_view.xml -->
<hr/>
<div>
    <h3>銷售總額: <t t-esc="widget.soAmountTotal"/></h3>
</div>

接著回頭調整 JS,在 willStart 階段增加一個 _rpc 來向路由發出請求

這裡直接提供整個函式,各位可以自行前後比較一下

willStart: async function () {
    let def = this._super(...arguments);

    let dataPromise = this._rpc({
        model: 'todo.list',
        method: 'get_self_todo_list',
        args: [[]],
    });

    let amountPromise = this._rpc({
        route: '/ironman/data/sale_total',
    });

    let [defReturn, data, amount] = await Promise.all([def, dataPromise, amountPromise]);
    this.todoList = data || [];
    this.soAmountTotal = amount.total || 0;

    return defReturn;
},

完成後重新啟動伺服器,重新整理網頁後就能看到結果囉

https://ithelp.ithome.com.tw/upload/images/20230912/20141805wktGk6DAcd.png


上一篇
Day 24 實作 10: 建立 action client view - 增加事件(下)
下一篇
Day 26 實作 12: 建立 action client view - 增加按鈕能快速跳轉到報價單
系列文
Odoo 14 Javascript 開發心路歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言